from redis_demo.tools import Util

class Sales:

    def __init__(self):
        sql1 = 'select uname,upass from system_user'
        user_info = Util.query(sql1)
        self.red = Util.get_redis_conn()
        self.red.hmset('user_info', dict(user_info))

        sql2 = 'select gid,store from goods'
        goods_store = Util.query(sql2)
        self.red.hmset('goods_store', dict(goods_store))

        sql3 = 'select gid,price from goods'
        goods_price = Util.query(sql3)
        self.red.hmset('goods_price', dict(goods_price))


    def login(self):
        while 1:
            print('***************')
            uname = input('请输入账号')
            upass = input('请输入密码')
            md5_pass = Util.incrypt_md5(upass)

            # 验证码验证
            while 1:
                vcode = Util.get_vfcode()  # 系统提供的验证码
                print(f'验证码是：{vcode}')
                red = self.red
                red.set('vfcode', vcode)
                red.expire('vfcode', 60)
                code = input('请输入验证码')  # 自己输入的验证码
                if red.get('vfcode') is None:
                    print('验证码已过期，刷新')
                elif red.get('vfcode') != code.upper():
                    print('验证码输入错误，刷新')
                else:
                    break

            # 账号密码验证
            if red.hget('user_info', uname) == md5_pass:
                print('账号密码正确，欢迎登录')
                break
            else:
                print('账号或密码错误，请重新输入')


    def sale(self):
        """
        1.显示所有商品信息；
        2.提示请选择需要购买哪件商品？
        3.购买商品，输入购买商品的编号及数量；
        4.购买成功后，将剩余商品数量写回mysql中。
        :return:
        """
        red = self.red

        while 1:
            sql = 'select * from goods'
            goods = Util.query(sql)
            print('***************商品信息***************')
            print('编号\t名称\t价格\t数量')
            for good in goods:
                print(f"{good[0]}\t{good[1]}\t{good[2]}\t{good[3]}")
            while 1:
                gid = input('请选择要购买的商品编号')
                if not red.hexists('goods_store', gid):
                    print('商品编号输入错误，请重新输入')
                else:
                    break

            while 1:
                quanlity = int(input('请输入购买商品的数量'))
                if quanlity > int(red.hget('goods_store', gid)):
                    print('商品库存不足，请重新输入')
                else:
                    break

            total = float(red.hget('goods_price', gid)) * quanlity
            choice = input(f'购买商品的总金额为{total}元，确认购买吗？(y/n)')
            if choice == 'y':
                red.hincrby('goods_store', gid, 0-quanlity)
                sql2 = f'update goods set store={int(red.hget("goods_store", gid))} where gid={gid}'
                Util.update(sql2)
            else:
                break


if __name__ == '__main__':

    s = Sales()
    s.login()
    s.sale()